# -*- coding: iso-8859-1 -*-
# file Geode.py
# author Rocco Martino
#
############################################################################
#    Copyright (C) 2015 by Rocco Martino                                   #
#    martinorocco@gmail.com                                                #
#                                                                          #
#    This program is free software; you can redistribute it and/or modify  #
#    it under the terms of the GNU Lesser General Public License as        #
#    published by the Free Software Foundation; either version 2.1 of the  #
#    License, or (at your option) any later version.                       #
#                                                                          #
#    This program is distributed in the hope that it will be useful,       #
#    but WITHOUT ANY WARRANTY; without even the implied warranty of        #
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         #
#    GNU Lesser General Public License for more details.                   #
#                                                                          #
#    You should have received a copy of the GNU Lesser General Public      #
#    License along with this program; if not, write to the                 #
#    Free Software Foundation, Inc.,                                       #
#    59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             #
############################################################################

############################################################################
from . import Node, Geometry
from mathutils import Matrix
############################################################################




############################################################################
# ........................................................................ #
# ........................................................................ #
############################################################################




############################################################################
# ........................................................................ #
class Geode(Node.Node):





############################################################################
    Drawables = None
############################################################################









############################################################################
    def __init__(self, obj, data):
        super(Geode, self).__init__(obj, data)

        self.ClassName = "osg::Geode"

        self.Drawables = []
############################################################################




############################################################################
    def writeData(self, writer):
        super(Geode, self).writeData(writer)


        if self.BlenderObject:

            if self.BlenderObject.data:
                self.addDrawable( Geometry.Geometry( self.BlenderObject.data, self.Data ) )

            self.addChildren( self.BlenderObject.children )


        num_drawables = len(self.Drawables)

        if num_drawables > 0:
            writer.moveIn("Drawables %d" % num_drawables)

            for drawable in self.Drawables:
                drawable.writeObject(writer)

            writer.moveOut("Drawables %d" % num_drawables)
############################################################################




############################################################################
    def addDrawable(self, drawale):
        self.Drawables.append( drawale )
############################################################################




############################################################################
    def addChildren(self, children, accum = Matrix()):

        for child in children:

            if child.type != "MESH":
                continue


            matrix_local = accum * child.matrix_local

            try:
                if not child.material_slots[0].material.game_settings.physics:
                    self.addDrawable( Geometry.Geometry( child.data, self.Data,  matrix_local ) )
            except:
                if child.data:
                    self.addDrawable( Geometry.Geometry( child.data, self.Data,  matrix_local ) )


            self.addChildren( child.children, matrix_local )
############################################################################




# ........................................................................ #
############################################################################
